<?php
/**
 * 接口基础类库.
 * User: mac
 * Date: 2018/6/20
 * Time: 15:01
 */

namespace app\api\controller;

use think\Controller;
use think\Request;
use app\common\lib\IAuth;

class Api extends Controller
{
    protected $wecaht = array();
    protected $cache = array();
    public function initialize()
    {
        $this->wecaht = model("WpConfig")->getWeConfig();
        //验证token
        $this->_saveToken();
    }


    /**
     * curl请求
     * @param $url 请求地址
     * @param array $fields NO
     */
    public static function request($url,$fields = array()){
        //初始化
        $ch = curl_init();

        //设置相关参数
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

        //SSL 禁止校验
        curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
        curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);

        //判定是否有值
        if($fields){
            curl_setopt($ch,CURLOPT_POST,1);
            curl_setopt($ch,CURLOPT_POSTFIELDS,$fields);
        }

        $data = '';

        //发起请求
        if(curl_exec($ch)){
            $data = curl_multi_getcontent($ch);
        }

        //关闭请求返回数据
        curl_close($ch);
        return $data;
    }


    public function _saveToken()
    {
        //获取头部信息
        $token = input('post.token');
        //判断token是否存在
        if ($token) {
            //解密token
            $arr = IAuth::checkTokenPass($token);
            //判定有没有解密成功
            if (is_array($arr) || $arr != false) {
                //判定是否登陆
                $this->cache = $arr;
            } else {
                return show(false, 0, '授权已过期');
            }
        }

    }

    /**
     * @param $image   图片
     * @param $path    上传地址
     * @return string   返回地址
     */
    public static function imageUpload($image){
        $request = new Request();
        $file = $request->file($image);
        return $file;
        $info = $file->move('../uploads/code/');
        $res = 'https://' . $_SERVER['HTTP_HOST'] . '/uploads/' . $info->getSaveName();
        return $res;
    }



    //生成海报
    public static function createPoster($config=array(),$filename=""){


        //如果要看报什么错，可以先注释调这个header
        if(empty($filename)) header("content-type: image/png");

        $imageDefault = array(
            'left'=>0,
            'top'=>0,
            'right'=>0,
            'bottom'=>0,
            'width'=>100,
            'height'=>100,
            'opacity'=>100
        );
        $textDefault = array(
            'text'=>'',
            'left'=>0,
            'top'=>0,
            'fontSize'=>32, //字号
            'fontColor'=>'255,255,255', //字体颜色
            'angle'=>0,
        );

        $background = $config['background'];//海报最底层得背景

        //背景方法
        $backgroundInfo = getimagesize($background);
        $backgroundFun = 'imagecreatefrom'.image_type_to_extension($backgroundInfo[2], false);
        $background = $backgroundFun($background);
        $backgroundWidth = imagesx($background); //背景宽度
        $backgroundHeight = imagesy($background); //背景高度
        $imageRes = imageCreatetruecolor($backgroundWidth,$backgroundHeight);

        $color = imagecolorallocate($imageRes, 0, 0, 0);
        imagefill($imageRes, 0, 0, $color);

        imagecopyresampled($imageRes,$background,0,0,0,0,imagesx($background),imagesy($background),imagesx($background),imagesy($background));

        //处理了图片
        if(!empty($config['image'])){
            foreach ($config['image'] as $key => $val) {
                $val = array_merge($imageDefault,$val);
                $info = getimagesize($val['url']);
                $function = 'imagecreatefrom'.image_type_to_extension($info[2], false);
                if($val['stream']){ //如果传的是字符串图像流
                    $info = getimagesizefromstring($val['url']);
                    $function = 'imagecreatefromstring';
                }
                $res = $function($val['url']);
                $resWidth = $info[0];
                $resHeight = $info[1];

                //建立画板 ，缩放图片至指定尺寸
                $canvas=imagecreatetruecolor($val['width'], $val['height']);
                imagefill($canvas, 0, 0, $color);

                //关键函数，参数（目标资源，源，目标资源的开始坐标x,y, 源资源的开始坐标x,y,目标资源的宽高w,h,源资源的宽高w,h）
                imagecopyresampled($canvas, $res, 0, 0, 0, 0, $val['width'], $val['height'],$resWidth,$resHeight);
                $val['left'] = $val['left']<0?$backgroundWidth- abs($val['left']) - $val['width']:$val['left'];
                $val['top'] = $val['top']<0?$backgroundHeight- abs($val['top']) - $val['height']:$val['top'];

                //放置图像
                imagecopymerge($imageRes,$canvas, $val['left'],$val['top'],$val['right'],$val['bottom'],$val['width'],$val['height'],$val['opacity']);//左，上，右，下，宽度，高度，透明度
            }
        }

        //处理文字
        if(!empty($config['text'])){

            foreach ($config['text'] as $key => $val) {
                $val = array_merge($textDefault,$val);
                list($R,$G,$B) = explode(',', $val['fontColor']);
                $fontColor = imagecolorallocate($imageRes, $R, $G, $B);

                if($val['left']){
                    //可调节左右的方法
                    $val['left'] = $val['left']<0?$backgroundWidth- abs($val['left']):$val['left'];
                }else{
                    //文字水平居中实质
                    $fontBox = imagettfbbox($val['fontSize'],$val['angle'],$val['fontPath'],$val['text']);
                    $val['left'] = ceil(($backgroundWidth - $fontBox[2]) / 2);
                }

                $val['top'] = $val['top']<0 ?$backgroundHeight- abs($val['top']) : $val['top'];

                imagettftext($imageRes,$val['fontSize'],$val['angle'],$val['left'],$val['top'],$fontColor,$val['fontPath'],$val['text']);
            }
        }

        //生成图片
        if(!empty($filename)){
            $res = imagejpeg ($imageRes,$filename,90); //保存到本地
            imagedestroy($imageRes);
            if(!$res) return false;
            return $filename;
        }else{
            imagejpeg ($imageRes); //在浏览器上显示
            imagedestroy($imageRes);
        }
    }












    //生成个人小程序码
    public function getQrCodeById($id){
        $aurl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . $this->wecaht['appid'] . "&secret=" . $this->wecaht['appsecret'];
        $accessToken = json_decode(self::request($aurl), true);

        //请求小程序码的地址
        $url = "https://api.weixin.qq.com/wxa/getwxacode?access_token=" . $accessToken['access_token'];
        //参数
        $data = array(
            'path' => 'pages/index/index?inviteOpenId=' . $id,
            'width' => 230,
            'auto_color' => false,
            'line_color' => array(
                "r" => "27",
                "g" => "37",
                "b" => "55"
            ),
            'is_hyaline' => false
        );

        //post请求
        $qrcode = self::request($url, json_encode($data));
        return $qrcode;
    }


}